package com.aps.server.mapper;

import com.aps.server.entity.BasicEquip;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 设备信息 Mapper 接口
 * 继承 MyBatis Plus 的 BaseMapper，提供基础的 CRUD 操作
 */
@Mapper
public interface BasicEquipMapper extends BaseMapper<BasicEquip> {
    
    /**
     * 根据租户ID查询设备列表
     * 
     * @param tenantId 租户ID
     * @return 设备列表
     */
    @Select("SELECT * FROM basic_equip WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    List<BasicEquip> selectByTenantId(@Param("tenantId") String tenantId);
    
    /**
     * 根据租户ID分页查询设备列表
     * 
     * @param page 分页对象
     * @param tenantId 租户ID
     * @return 分页设备列表
     */
    @Select("SELECT * FROM basic_equip WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    IPage<BasicEquip> selectPageByTenantId(Page<BasicEquip> page, @Param("tenantId") String tenantId);
    
    /**
     * 根据设备名称查询设备
     * 
     * @param equipName 设备名称
     * @param tenantId 租户ID
     * @return 设备信息
     */
    @Select("SELECT * FROM basic_equip WHERE equip_name = #{equipName} AND tenant_id = #{tenantId}")
    BasicEquip selectByEquipName(@Param("equipName") String equipName, @Param("tenantId") String tenantId);
    
    /**
     * 根据设备类型查询设备列表
     * 
     * @param equipType 设备类型
     * @param tenantId 租户ID
     * @return 设备列表
     */
    @Select("SELECT * FROM basic_equip WHERE equip_type = #{equipType} AND tenant_id = #{tenantId} ORDER BY create_time DESC")
    List<BasicEquip> selectByEquipType(@Param("equipType") String equipType, @Param("tenantId") String tenantId);
    
    /**
     * 根据设备状态查询设备列表
     * 
     * @param equipStatus 设备状态
     * @param tenantId 租户ID
     * @return 设备列表
     */
    @Select("SELECT * FROM basic_equip WHERE equip_status = #{equipStatus} AND tenant_id = #{tenantId} ORDER BY create_time DESC")
    List<BasicEquip> selectByEquipStatus(@Param("equipStatus") String equipStatus, @Param("tenantId") String tenantId);
    
    /**
     * 根据租户ID统计设备数量
     * 
     * @param tenantId 租户ID
     * @return 设备数量
     */
    @Select("SELECT COUNT(*) FROM basic_equip WHERE tenant_id = #{tenantId}")
    Long countByTenantId(@Param("tenantId") String tenantId);
    
    /**
     * 根据设备状态统计设备数量
     * 
     * @param equipStatus 设备状态
     * @param tenantId 租户ID
     * @return 设备数量
     */
    @Select("SELECT COUNT(*) FROM basic_equip WHERE equip_status = #{equipStatus} AND tenant_id = #{tenantId}")
    Long countByEquipStatus(@Param("equipStatus") String equipStatus, @Param("tenantId") String tenantId);
}
